home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 11 / Cream of the Crop 11-2.iso / os2 / rsynth1.zip / english.c < prev    next >
C/C++ Source or Header  |  1994-11-08  |  17KB  |  614 lines

  1. #include <config.h>
  2.  
  3. /* $Id: english.c,v 1.13 1994/11/08 13:30:50 a904209 Exp a904209 $
  4.  */
  5. char *english_id = "$Id: english.c,v 1.13 1994/11/08 13:30:50 a904209 Exp a904209 $";
  6.  
  7. /*
  8.    **      English to Phoneme rules.
  9.    **
  10.    **      Derived from:
  11.    **
  12.    **           AUTOMATIC TRANSLATION OF ENGLISH TEXT TO PHONETICS
  13.    **                  BY MEANS OF LETTER-TO-SOUND RULES
  14.    **
  15.    **                      NRL Report 7948
  16.    **
  17.    **                    January 21st, 1976
  18.    **          Naval Research Laboratory, Washington, D.C.
  19.    **
  20.    **
  21.    **      Published by the National Technical Information Service as
  22.    **      document "AD/A021 929".
  23.    **
  24.    **
  25.    **
  26.    **      The Phoneme codes:
  27.    **
  28.    **              IY      bEEt            IH      bIt
  29.    **              EY      gAte            EH      gEt
  30.    **              AE      fAt             AA      fAther
  31.    **              AO      lAWn            OW      lOne
  32.    **              UH      fUll            UW      fOOl
  33.    **              ER      mURdER          AX      About
  34.    **              AH      bUt             AY      hIde
  35.    **              AW      hOW             OY      tOY
  36.    **
  37.    **              p       Pack            b       Back
  38.    **              t       Time            d       Dime
  39.    **              k       Coat            g       Goat
  40.    **              f       Fault           v       Vault
  41.    **              TH      eTHer           DH      eiTHer
  42.    **              s       Sue             z       Zoo
  43.    **              SH      leaSH           ZH      leiSure
  44.    **              HH      How             m       suM
  45.    **              n       suN             NG      suNG
  46.    **              l       Laugh           w       Wear
  47.    **              y       Young           r       Rate
  48.    **              CH      CHar            j       Jar
  49.    **              WH      WHere
  50.    **
  51.    **
  52.    **      Rules are made up of four parts:
  53.    **
  54.    **              The left context.
  55.    **              The text to match.
  56.    **              The right context.
  57.    **              The phonemes to substitute for the matched text.
  58.    **
  59.    **      Procedure:
  60.    **
  61.    **              Seperate each block of letters (apostrophes included)
  62.    **              and add a space on each side.  For each unmatched
  63.    **              letter in the word, look through the rules where the
  64.    **              text to match starts with the letter in the word.  If
  65.    **              the text to match is found and the right and left
  66.    **              context patterns also match, output the phonemes for
  67.    **              that rule and skip to the next unmatched letter.
  68.    **
  69.    **
  70.    **      Special Context Symbols:
  71.    **
  72.    **              #       One or more vowels
  73.    **              :       Zero or more consonants
  74.    **              ^       One consonant.
  75.    **              .       One of B, D, V, G, J, L, M, N, R, W or Z (voiced
  76.    **                      consonants)
  77.    **              %       One of ER, E, ES, ED, ING, ELY (a suffix)
  78.    **                      (Found in right context only)
  79.    **              +       One of E, I or Y (a "front" vowel)
  80.    **
  81.  */
  82.  
  83.  
  84. /* Context definitions */
  85. static char Anything[] = "";
  86.  /* No context requirement */
  87.  
  88. static char Nothing[] = " ";
  89.  /* Context is beginning or end of word */
  90.  
  91. static char Silent[] = "";
  92.  /* No phonemes */
  93.  
  94.  
  95. #define LEFT_PART       0
  96. #define MATCH_PART      1
  97. #define RIGHT_PART      2
  98. #define OUT_PART        3
  99.  
  100. typedef char *Rule[4];
  101.  /* Rule is an array of 4 character pointers */
  102.  
  103.  
  104. /*0 = Punctuation */
  105. /*
  106.    **      LEFT_PART       MATCH_PART      RIGHT_PART      OUT_PART
  107.  */
  108.  
  109.  
  110. static Rule punct_rules[] =
  111. {
  112.  {Anything, " ", Anything, " "},
  113.  {Anything, "-", Anything, ""},
  114.  {".", "'S", Anything, "z"},
  115.  {"#:.E", "'S", Anything, "z"},
  116.  {"#", "'S", Anything, "z"},
  117.  {Anything, "'", Anything, ""},
  118.  {Anything, ",", Anything, " "},
  119.  {Anything, ".", Anything, " "},
  120.  {Anything, "?", Anything, " "},
  121.  {Anything, "!", Anything, " "},
  122.  {Anything, 0, Anything, Silent},
  123. };
  124.  
  125. static Rule A_rules[] =
  126. {
  127.  {Anything, "A", Nothing, "@"},
  128.  {Nothing, "ARE", Nothing, "0r"},
  129.  {Nothing, "AR", "O", "@r"},
  130.  {Anything, "AR", "#", "er"},
  131.  {"^", "AS", "#", "eIs"},
  132.  {Anything, "A", "WA", "@"},
  133.  {Anything, "AW", Anything, "O"},
  134.  {" :", "ANY", Anything, "eni"},
  135.  {Anything, "A", "^+#", "eI"},
  136.  {"#:", "ALLY", Anything, "@li"},
  137.  {Nothing, "AL", "#", "@l"},
  138.  {Anything, "AGAIN", Anything, "@gen"},
  139.  {"#:", "AG", "E", "IdZ"},
  140.  {Anything, "A", "^+:#", "&"},
  141.  {" :", "A", "^+ ", "eI"},
  142.  {Anything, "A", "^%", "eI"},
  143.  {Nothing, "ARR", Anything, "@r"},
  144.  {Anything, "ARR", Anything, "&r"},
  145.  {" :", "AR", Nothing, "0r"},
  146.  {Anything, "AR", Nothing, "3"},
  147.  {Anything, "AR", Anything, "0r"},
  148.  {Anything, "AIR", Anything, "er"},
  149.  {Anything, "AI", Anything, "eI"},
  150.  {Anything, "AY", Anything, "eI"},
  151.  {Anything, "AU", Anything, "O"},
  152.  {"#:", "AL", Nothing, "@l"},
  153.  {"#:", "ALS", Nothing, "@lz"},
  154.  {Anything, "ALK", Anything, "Ok"},
  155.  {Anything, "AL", "^", "Ol"},
  156.  {" :", "ABLE", Anything, "eIb@l"},
  157.  {Anything, "ABLE", Anything, "@b@l"},
  158.  {Anything, "ANG", "+", "eIndZ"},
  159.  {"^", "A", "^#", "eI"},
  160.  {Anything, "A", Anything, "&"},
  161.  {Anything, 0, Anything, Silent},
  162. };
  163.  
  164. static Rule B_rules[] =
  165. {
  166.  {Nothing, "BE", "^#", "bI"},
  167.  {Anything, "BEING", Anything, "biIN"},
  168.  {Nothing, "BOTH", Nothing, "b@UT"},
  169.  {Nothing, "BUS", "#", "bIz"},
  170.  {Anything, "BUIL", Anything, "bIl"},
  171.  {Anything, "B", Anything, "b"},
  172.  {Anything, 0, Anything, Silent},
  173. };
  174.  
  175. static Rule C_rules[] =
  176. {
  177.  {Nothing, "CH", "^", "k"},
  178.  {"^E", "CH", Anything, "k"},
  179.  {Anything, "CH", Anything, "tS"},
  180.  {" S", "CI", "#", "saI"},
  181.  {Anything, "CI", "A", "S"},
  182.  {Anything, "CI", "O", "S"},
  183.  {Anything, "CI", "EN", "S"},
  184.  {Anything, "C", "+", "s"},
  185.  {Anything, "CK", Anything, "k"},
  186.  {Anything, "COM", "%", "kVm"},
  187.  {Anything, "C", Anything, "k"},
  188.  {Anything, 0, Anything, Silent},
  189. };
  190.  
  191. static Rule D_rules[] =
  192. {
  193.  {"#:", "DED", Nothing, "dId"},
  194.  {".E", "D", Nothing, "d"},
  195.  {"#:^E", "D", Nothing, "t"},
  196.  {Nothing, "DE", "^#", "dI"},
  197.  {Nothing, "DO", Nothing, "du"},
  198.  {Nothing, "DOES", Anything, "dVz"},
  199.  {Nothing, "DOING", Anything, "duIN"},
  200.  {Nothing, "DOW", Anything, "daU"},
  201.  {Anything, "DU", "A", "dZu"},
  202.  {Anything, "D", Anything, "d"},
  203.  {Anything, 0, Anything, Silent},
  204. };
  205.  
  206. static Rule E_rules[] =
  207. {
  208.  {"#:", "E", Nothing, ""},
  209.  {"':^", "E", Nothing, ""},
  210.  {" :", "E", Nothing, "i"},
  211.  {"#", "ED", Nothing, "d"},
  212.  {"#:", "E", "D ", ""},
  213.  {Anything, "EV", "ER", "ev"},
  214.  {Anything, "E", "^%", "i"},
  215.  {Anything, "ERI", "#", "iri"},
  216.  {Anything, "ERI", Anything, "erI"},
  217.  {"#:", "ER", "#", "3"},
  218.  {Anything, "ER", "#", "er"},
  219.  {Anything, "ER", Anything, "3"},
  220.  {Nothing, "EVEN", Anything, "iven"},
  221.  {"#:", "E", "W", ""},
  222.  {"T", "EW", Anything, "u"},
  223.  {"S", "EW", Anything, "u"},
  224.  {"R", "EW", Anything, "u"},
  225.  {"D", "EW", Anything, "u"},
  226.  {"L", "EW", Anything, "u"},
  227.  {"Z", "EW", Anything, "u"},
  228.  {"N", "EW", Anything, "u"},
  229.  {"J", "EW", Anything, "u"},
  230.  {"TH", "EW", Anything, "u"},
  231.  {"CH", "EW", Anything, "u"},
  232.  {"SH", "EW", Anything, "u"},
  233.  {Anything, "EW", Anything, "ju"},
  234.  {Anything, "E", "O", "i"},
  235.  {"#:S", "ES", Nothing, "Iz"},
  236.  {"#:C", "ES", Nothing, "Iz"},
  237.  {"#:G", "ES", Nothing, "Iz"},
  238.  {"#:Z", "ES", Nothing, "Iz"},
  239.  {"#:X", "ES", Nothing, "Iz"},
  240.  {"#:J", "ES", Nothing, "Iz"},
  241.  {"#:CH", "ES", Nothing, "Iz"},
  242.  {"#:SH", "ES", Nothing, "Iz"},
  243.  {"#:", "E", "S ", ""},
  244.  {"#:", "ELY", Nothing, "li"},
  245.  {"#:", "EMENT", Anything, "ment"},
  246.  {Anything, "EFUL", Anything, "fUl"},
  247.  {Anything, "EE", Anything, "i"},
  248.  {Anything, "EARN", Anything, "3n"},
  249.  {Nothing, "EAR", "^", "3"},
  250.  {Anything, "EAD", Anything, "ed"},
  251.  {"#:", "EA", Nothing, "i@"},
  252.  {Anything, "EA", "SU", "e"},
  253.  {Anything, "EA", Anything, "i"},
  254.  {Anything, "EIGH", Anything, "eI"},
  255.  {Anything, "EI", Anything, "i"},
  256.  {Nothing, "EYE", Anything, "aI"},
  257.  {Anything, "EY", Anything, "i"},
  258.  {Anything, "EU", Anything, "ju"},
  259.  {Anything, "E", Anything, "e"},
  260.  {Anything, 0, Anything, Silent},
  261. };
  262.  
  263. static Rule F_rules[] =
  264. {
  265.  {Anything, "FUL", Anything, "fUl"},
  266.  {Anything, "F", Anything, "f"},
  267.  {Anything, 0, Anything, Silent},
  268. };
  269.  
  270. static Rule G_rules[] =
  271. {
  272.  {Anything, "GIV", Anything, "gIv"},
  273.  {Nothing, "G", "I^", "g"},
  274.  {Anything, "GE", "T", "ge"},
  275.  {"SU", "GGES", Anything, "gdZes"},
  276.  {Anything, "GG", Anything, "g"},
  277.  {" B#", "G", Anything, "g"},
  278.  {Anything, "G", "+", "dZ"},
  279.  {Anything, "GREAT", Anything, "greIt"},
  280.  {"#", "GH", Anything, ""},
  281.  {Anything, "G", Anything, "g"},
  282.  {Anything, 0, Anything, Silent},
  283. };
  284.  
  285. static Rule H_rules[] =
  286. {
  287.  {Nothing, "HAV", Anything, "h&v"},
  288.  {Nothing, "HERE", Anything, "hir"},
  289.  {Nothing, "HOUR", Anything, "aU3"},
  290.  {Anything, "HOW", Anything, "haU"},
  291.  {Anything, "H", "#", "h"},
  292.  {Anything, "H", Anything, ""},
  293.  {Anything, 0, Anything, Silent},
  294. };
  295.  
  296. static Rule I_rules[] =
  297. {
  298.  {Nothing, "IAIN", Nothing, "I@n"},
  299.  {Nothing, "ING", Nothing, "IN"},
  300.  {Nothing, "IN", Anything, "In"},
  301.  {Nothing, "I", Nothing, "aI"},
  302.  {Anything, "IN", "D", "aIn"},
  303.  {Anything, "IER", Anything, "i3"},
  304.  {"#:R", "IED", Anything, "id"},
  305.  {Anything, "IED", Nothing, "aId"},
  306.  {Anything, "IEN", Anything, "ien"},
  307.  {Anything, "IE", "T", "aIe"},
  308.  {" :", "I", "%", "aI"},
  309.  {Anything, "I", "%", "i"},
  310.  {Anything, "IE", Anything, "i"},
  311.  {Anything, "I", "^+:#", "I"},
  312.  {Anything, "IR", "#", "aIr"},
  313.  {Anything, "IZ", "%", "aIz"},
  314.  {Anything, "IS", "%", "aIz"},
  315.  {Anything, "I", "D%", "aI"},
  316.  {"+^", "I", "^+", "I"},
  317.  {Anything, "I", "T%", "aI"},
  318.  {"#:^", "I", "^+", "I"},
  319.  {Anything, "I", "^+", "aI"},
  320.  {Anything, "IR", Anything, "3"},
  321.  {Anything, "IGH", Anything, "aI"},
  322.  {Anything, "ILD", Anything, "aIld"},
  323.  {Anything, "IGN", Nothing, "aIn"},
  324.  {Anything, "IGN", "^", "aIn"},
  325.  {Anything, "IGN", "%", "aIn"},
  326.  {Anything, "IQUE", Anything, "ik"},
  327.  {"^", "I", "^#", "aI"},
  328.  {Anything, "I", Anything, "I"},
  329.  {Anything, 0, Anything, Silent},
  330. };
  331.  
  332. static Rule J_rules[] =
  333. {
  334.  {Anything, "J", Anything, "dZ"},
  335.  {Anything, 0, Anything, Silent},
  336. };
  337.  
  338. static Rule K_rules[] =
  339. {
  340.  {Nothing, "K", "N", ""},
  341.  {Anything, "K", Anything, "k"},
  342.  {Anything, 0, Anything, Silent},
  343. };
  344.  
  345. static Rule L_rules[] =
  346. {
  347.  {Anything, "LO", "C#", "l@U"},
  348.  {"L", "L", Anything, ""},
  349.  {"#:^", "L", "%", "@l"},
  350.  {Anything, "LEAD", Anything, "lid"},
  351.  {Anything, "L", Anything, "l"},
  352.  {Anything, 0, Anything, Silent},
  353. };
  354.  
  355. static Rule M_rules[] =
  356. {
  357.  {Anything, "MOV", Anything, "muv"},
  358.  {"#", "MM", "#", "m"},
  359.  {Anything, "M", Anything, "m"},
  360.  {Anything, 0, Anything, Silent},
  361. };
  362.  
  363. static Rule N_rules[] =
  364. {
  365.  {"E", "NG", "+", "ndZ"},
  366.  {Anything, "NG", "R", "Ng"},
  367.  {Anything, "NG", "#", "Ng"},
  368.  {Anything, "NGL", "%", "Ng@l"},
  369.  {Anything, "NG", Anything, "N"},
  370.  {Anything, "NK", Anything, "Nk"},
  371.  {Nothing, "NOW", Nothing, "naU"},
  372.  {"#", "NG", Nothing, "Ng"},
  373.  {Anything, "N", Anything, "n"},
  374.  {Anything, 0, Anything, Silent},
  375. };
  376.  
  377. static Rule O_rules[] =
  378. {
  379.  {Anything, "OF", Nothing, "@v"},
  380.  {Anything, "OROUGH", Anything, "3@U"},
  381.  {"#:", "OR", Nothing, "3"},
  382.  {"#:", "ORS", Nothing, "3z"},
  383.  {Anything, "OR", Anything, "Or"},
  384.  {Nothing, "ONE", Anything, "wVn"},
  385.  {Anything, "OW", Anything, "@U"},
  386.  {Nothing, "OVER", Anything, "@Uv3"},
  387.  {Anything, "OV", Anything, "Vv"},
  388.  {Anything, "O", "^%", "@U"},
  389.  {Anything, "O", "^EN", "@U"},
  390.  {Anything, "O", "^I#", "@U"},
  391.  {Anything, "OL", "D", "@Ul"},
  392.  {Anything, "OUGHT", Anything, "Ot"},
  393.  {Anything, "OUGH", Anything, "Vf"},
  394.  {Nothing, "OU", Anything, "aU"},
  395.  {"H", "OU", "S#", "aU"},
  396.  {Anything, "OUS", Anything, "@s"},
  397.  {Anything, "OUR", Anything, "Or"},
  398.  {Anything, "OULD", Anything, "Ud"},
  399.  {"^", "OU", "^L", "V"},
  400.  {Anything, "OUP", Anything, "up"},
  401.  {Anything, "OU", Anything, "aU"},
  402.  {Anything, "OY", Anything, "oI"},
  403.  {Anything, "OING", Anything, "@UIN"},
  404.  {Anything, "OI", Anything, "oI"},
  405.  {Anything, "OOR", Anything, "Or"},
  406.  {Anything, "OOK", Anything, "Uk"},
  407.  {Anything, "OOD", Anything, "Ud"},
  408.  {Anything, "OO", Anything, "u"},
  409.  {Anything, "O", "E", "@U"},
  410.  {Anything, "O", Nothing, "@U"},
  411.  {Anything, "OA", Anything, "@U"},
  412.  {Nothing, "ONLY", Anything, "@Unli"},
  413.  {Nothing, "ONCE", Anything, "wVns"},
  414.  {Anything, "ON'T", Anything, "@Unt"},
  415.  {"C", "O", "N", "0"},
  416.  {Anything, "O", "NG", "O"},
  417.  {" :^", "O", "N", "V"},
  418.  {"I", "ON", Anything, "@n"},
  419.  {"#:", "ON", Nothing, "@n"},
  420.  {"#^", "ON", Anything, "@n"},
  421.  {Anything, "O", "ST ", "@U"},
  422.  {Anything, "OF", "^", "Of"},
  423.  {Anything, "OTHER", Anything, "VD3"},
  424.  {Anything, "OSS", Nothing, "Os"},
  425.  {"#:^", "OM", Anything, "Vm"},
  426.  {Anything, "O", Anything, "0"},
  427.  {Anything, 0, Anything, Silent},
  428. };
  429.  
  430. static Rule P_rules[] =
  431. {
  432.  {Anything, "PH", Anything, "f"},
  433.  {Anything, "PEOP", Anything, "pip"},
  434.  {Anything, "POW", Anything, "paU"},
  435.  {Anything, "PUT", Nothing, "pUt"},
  436.  {Anything, "P", Anything, "p"},
  437.  {Anything, 0, Anything, Silent},
  438. };
  439.  
  440. static Rule Q_rules[] =
  441. {
  442.  {Anything, "QUAR", Anything, "kwOr"},
  443.  {Anything, "QU", Anything, "kw"},
  444.  {Anything, "Q", Anything, "k"},
  445.  {Anything, 0, Anything, Silent},
  446. };
  447.  
  448. static Rule R_rules[] =
  449. {
  450.  {Nothing, "RE", "^#", "ri"},
  451.  {Anything, "R", Anything, "r"},
  452.  {Anything, 0, Anything, Silent},
  453. };
  454.  
  455. static Rule S_rules[] =
  456. {
  457.  {Anything, "SH", Anything, "S"},
  458.  {"#", "SION", Anything, "Z@n"},
  459.  {Anything, "SOME", Anything, "sVm"},
  460.  {"#", "SUR", "#", "Z3"},
  461.  {Anything, "SUR", "#", "S3"},
  462.  {"#", "SU", "#", "Zu"},
  463.  {"#", "SSU", "#", "Su"},
  464.  {"#", "SED", Nothing, "zd"},
  465.  {"#", "S", "#", "z"},
  466.  {Anything, "SAID", Anything, "sed"},
  467.  {"^", "SION", Anything, "S@n"},
  468.  {Anything, "S", "S", ""},
  469.  {".", "S", Nothing, "z"},
  470.  {"#:.E", "S", Nothing, "z"},
  471.  {"#:^##", "S", Nothing, "z"},
  472.  {"#:^#", "S", Nothing, "s"},
  473.  {"U", "S", Nothing, "s"},
  474.  {" :#", "S", Nothing, "z"},
  475.  {Nothing, "SCH", Anything, "sk"},
  476.  {Anything, "S", "C+", ""},
  477.  {"#", "SM", Anything, "zm"},
  478.  {"#", "SN", "'", "z@n"},
  479.  {Anything, "S", Anything, "s"},
  480.  {Anything, 0, Anything, Silent},
  481. };
  482.  
  483. static Rule T_rules[] =
  484. {
  485.  {Nothing, "THE", Nothing, "D@"},
  486.  {Anything, "TO", Nothing, "tu"},
  487.  {Anything, "THAT", Nothing, "D&t"},
  488.  {Nothing, "THIS", Nothing, "DIs"},
  489.  {Nothing, "THEY", Anything, "DeI"},
  490.  {Nothing, "THERE", Anything, "Der"},
  491.  {Anything, "THER", Anything, "D3"},
  492.  {Anything, "THEIR", Anything, "Der"},
  493.  {Nothing, "THAN", Nothing, "D&n"},
  494.  {Nothing, "THEM", Nothing, "Dem"},
  495.  {Anything, "THESE", Nothing, "Diz"},
  496.  {Nothing, "THEN", Anything, "Den"},
  497.  {Anything, "THROUGH", Anything, "Tru"},
  498.  {Anything, "THOSE", Anything, "D@Uz"},
  499.  {Anything, "THOUGH", Nothing, "D@U"},
  500.  {Nothing, "THUS", Anything, "DVs"},
  501.  {Anything, "TH", Anything, "T"},
  502.  {"#:", "TED", Nothing, "tId"},
  503.  {"S", "TI", "#N", "tS"},
  504.  {Anything, "TI", "O", "S"},
  505.  {Anything, "TI", "A", "S"},
  506.  {Anything, "TIEN", Anything, "S@n"},
  507.  {Anything, "TUR", "#", "tS3"},
  508.  {Anything, "TU", "A", "tSu"},
  509.  {Nothing, "TWO", Anything, "tu"},
  510.  {Anything, "T", Anything, "t"},
  511.  {Anything, 0, Anything, Silent},
  512. };
  513.  
  514. static Rule U_rules[] =
  515. {
  516.  {Nothing, "UN", "I", "jun"},
  517.  {Nothing, "UN", Anything, "Vn"},
  518.  {Nothing, "UPON", Anything, "@pOn"},
  519.  {"T", "UR", "#", "Ur"},
  520.  {"S", "UR", "#", "Ur"},
  521.  {"R", "UR", "#", "Ur"},
  522.  {"D", "UR", "#", "Ur"},
  523.  {"L", "UR", "#", "Ur"},
  524.  {"Z", "UR", "#", "Ur"},
  525.  {"N", "UR", "#", "Ur"},
  526.  {"J", "UR", "#", "Ur"},
  527.  {"TH", "UR", "#", "Ur"},
  528.  {"CH", "UR", "#", "Ur"},
  529.  {"SH", "UR", "#", "Ur"},
  530.  {Anything, "UR", "#", "jUr"},
  531.  {Anything, "UR", Anything, "3"},
  532.  {Anything, "U", "^ ", "V"},
  533.  {Anything, "U", "^^", "V"},
  534.  {Anything, "UY", Anything, "aI"},
  535.  {" G", "U", "#", ""},
  536.  {"G", "U", "%", ""},
  537.  {"G", "U", "#", "w"},
  538.  {"#N", "U", Anything, "ju"},
  539.  {"T", "U", Anything, "u"},
  540.  {"S", "U", Anything, "u"},
  541.  {"R", "U", Anything, "u"},
  542.  {"D", "U", Anything, "u"},
  543.  {"L", "U", Anything, "u"},
  544.  {"Z", "U", Anything, "u"},
  545.  {"N", "U", Anything, "u"},
  546.  {"J", "U", Anything, "u"},
  547.  {"TH", "U", Anything, "u"},
  548.  {"CH", "U", Anything, "u"},
  549.  {"SH", "U", Anything, "u"},
  550.  {Anything, "U", Anything, "ju"},
  551.  {Anything, 0, Anything, Silent},
  552. };
  553.  
  554. static Rule V_rules[] =
  555. {
  556.  {Anything, "VIEW", Anything, "vju"},
  557.  {Anything, "V", Anything, "v"},
  558.  {Anything, 0, Anything, Silent},
  559. };
  560.  
  561. static Rule W_rules[] =
  562. {
  563.  {Nothing, "WERE", Anything, "w3"},
  564.  {Anything, "WA", "S", "w0"},
  565.  {Anything, "WA", "T", "w0"},
  566.  {Anything, "WHERE", Anything, "hwer"},
  567.  {Anything, "WHAT", Anything, "hw0t"},
  568.  {Anything, "WHOL", Anything, "h@Ul"},
  569.  {Anything, "WHO", Anything, "hu"},
  570.  {Anything, "WH", Anything, "hw"},
  571.  {Anything, "WAR", Anything, "wOr"},
  572.  {Anything, "WOR", "^", "w3"},
  573.  {Anything, "WR", Anything, "r"},
  574.  {Anything, "W", Anything, "w"},
  575.  {Anything, 0, Anything, Silent},
  576. };
  577.  
  578. static Rule X_rules[] =
  579. {
  580.  {Anything, "X", Anything, "ks"},
  581.  {Anything, 0, Anything, Silent},
  582. };
  583.  
  584. static Rule Y_rules[] =
  585. {
  586.  {Anything, "YOUNG", Anything, "jVN"},
  587.  {Nothing, "YOU", Anything, "ju"},
  588.  {Nothing, "YES", Anything, "jes"},
  589.  {Nothing, "Y", Anything, "j"},
  590.  {"#:^", "Y", Nothing, "i"},
  591.  {"#:^", "Y", "I", "i"},
  592.  {" :", "Y", Nothing, "aI"},
  593.  {" :", "Y", "#", "aI"},
  594.  {" :", "Y", "^+:#", "I"},
  595.  {" :", "Y", "^#", "aI"},
  596.  {Anything, "Y", Anything, "I"},
  597.  {Anything, 0, Anything, Silent},
  598. };
  599.  
  600. static Rule Z_rules[] =
  601. {
  602.  {Anything, "Z", Anything, "z"},
  603.  {Anything, 0, Anything, Silent},
  604. };
  605.  
  606. Rule *Rules[] =
  607. {
  608.  punct_rules,
  609.  A_rules, B_rules, C_rules, D_rules, E_rules, F_rules, G_rules,
  610.  H_rules, I_rules, J_rules, K_rules, L_rules, M_rules, N_rules,
  611.  O_rules, P_rules, Q_rules, R_rules, S_rules, T_rules, U_rules,
  612.  V_rules, W_rules, X_rules, Y_rules, Z_rules
  613. };
  614.